<?php
function king($m, $n)
{
    //构建初始序列，记录m只猴子在圈中
    $data = array_fill(0, $m, 1);

    $t=0;                         // 报数位置，首次报数的起始位置为0，是第1只猴子

    $s = 0;                       //   报数累计

    for ($i=1; $i<=$m; )          //    循环要执行m次，有m个猴子要出圈
    {
        $s += $data[$t];          //    s累加中，猴子在圈时加１相当于报数，出圈后是加０相当于没有报数

        // 已经有n个未出圈猴子报数
        if($s == $n)
        {
            $data[$t]=0;              //猴子出圈
            echo ($t+1).PHP_EOL;      //输出出圈猴子的编号
            $s = 0;   //重新开始累加
            $i++;     //出圈的猴子加1
        }

        $t=($t+1) % $m;    //再报数时，从下一只猴子开始
    }

    return $t+1;
}

king(8, 4);